/* eslint-disable */
import config from '@/config'
// baseURL地址
const baseURL = process.env.NODE_ENV === 'development' ? config.baseUrl.dev : config.baseUrl.pro
// 前往授权
export const toGrant = () => {
  uni.showModal({
    title: '提示',
    content: '您当前还未登录',
    confirmColor: '#5fc1f3',
    confirmText: '立即登录',
    success({
      confirm,
      cancel
    }) {
      if (confirm) {
        // uni.removeStorage({ key: 'ticket' })
        uni.navigateTo({
          url: '/pages/login/grant/main'
        })
      } else if (cancel) {
        uni.navigateBack()
      }
    }
  })
}

// 用户登录信息相关错误(返回当前的状态码)
/**
 * 10:用户没有登录
 * 11:用户登录失效
 * 12:请先获取验证码
 * 13:验证码错误
 * 14:未绑定账号
 * 15:手机号已注册
 */
export const USER_ERROR = [10, 11, 12, 13, 14]

/**
 * grant
 * -1：取消授权
 * 0：等待授权（默认）
 * 1：已授权
 * 2：前往绑定
 */
let timer = null

/**
 * type：请求方式
 * url：地址
 * data：数据
 * success：成功执行函数
 * complete：完成执行函数
 * check：是否传ticket  //  这个是相当于ticket
 * loading：是否显示loading加载
 * tip：是否前往授权页面
 * status：预期返回的status // 当返回的是自己传过来的状态码执行相对应的代码
 * statusFun: 预期返回的status后执行的函数
 * */

const request = ({
  type = 'GET',
  url,
  data,
  success,
  complete,
  check = true,
  loading = false,
  tip = true,
  status = [],
  statusFun
}) => {
  let grant = uni.getStorageSync('grant')
  // 如果为空，置为等待授权
  if (grant === '') grant = 0
  // 如果为取消授权
  if (grant === -1) {
    // 将授权状态置为等待授权
    uni.setStorageSync('grant', 0)
  }
  // 加载状态
  loading && uni.showLoading({
    title: '加载中'
  })
  // 这个是ticket
  const ticket = uni.getStorageSync('ticket') || ''
  const params = {
    method: type,
    url: `${baseURL}${url}`,
    header: {
      'content-type': 'application/x-www-form-urlencoded'
    },
    success: (res) => {
      const { code, msg } = res.data
      const { data } = res
      // 期望的返回状态
      if (status.includes(code)) {
        // 此处是微信没有注册返回状态码14 然后跳转绑定手机号这个过程就相当于注册了 注册需要 微信登录的code参数
        statusFun && statusFun(data)
        // 状态码，用户没有登录或者登陆信息失效，前往授权
      } else if (USER_ERROR.includes(code)) {
        tip && toGrant()
        return false
      } else if (code === 1) {
        // 请求成功
        success && success(data)
      } else if (code === 0 || code === -1) {
        // 请求失败
        uni.showToast({
          title: msg,
          icon: 'none'
        })
      }
    },
    complete: (res) => {
      // 自主添加
      complete && complete(res)
      // 防止同时有多个请求出现多个正在加载的图标
      if (loading) {
        timer && clearTimeout(timer)
        timer = setTimeout(() => {
          uni.hideLoading()
          complete && complete(res)
        }, 500)
      }
    }
  }
  // ticket存在默认传ticket
  check && (params.header.ticket = ticket)
  // 添加data参数
  data && Object.assign(params, {
    data
  })
  uni.request(params)
}

export default request
